function Ajax(options){
    //传入给服务器的URL必填
    if(!options.url){
        throw new Error("请求URL不能为空!");
    }
    //定义一个默认参数,作用是不写的使用,可以使用的默认值
    let dp = {
        type:"GET",//请求方式有默认值
        data:"",//请求参数
        async:true,//是否异步,默认值true
        success:function(){},//函数
        dataType:'string'//期望服务器返回给我们的数据
    }
    //将传入的数据交给的默认值,你传了,就使用你传入的内容,如果你没有传入,使用默认值
    for(let key in options){
        dp[key] = options[key]
    }
    //校验用户传入数据格式
    if(!(dp.type.toUpperCase() == "GET" || dp.type.toUpperCase() == "POST")){
        throw new Error("请求的方式为GET或者POST请求")
    }
    //校验是否异步
    if(typeof dp.async != 'boolean'){
        throw new Error("是否异步为true或者false")
    }
    // [object Function]
    if(Object.prototype.toString.call(dp.success) != '[object Function]'){
        throw new Error("使用函数接收服务端传送过来的数据")
    }
    //校验期望返回的数据类型
    if(!(dp.dataType == 'string' || dp.dataType == 'json')){
        throw new Error("期望返回的数据类型是字符串或者JSON")
    }
    //校验客户的传参    "username=wenyuan&password=123456&age=18"
    // (username=wenyuan&password=123456)  
    if(!(typeof dp.data == 'string' && /^(\w+=\w+&?)*$/.test(dp.data) || Object.prototype.toString.call(dp.data) == '[object Object]')){
        throw new Error("校验参数错误")
    }
    if(Object.prototype.toString.call(dp.data) == '[object Object]'){
        let str = ""
        for(let key in dp.data){
            str+=`${key}=${dp.data[key]}&`
        }
        str = str.slice(0,-1);
        dp.data = str;
    }
    /* 
        发送ajax请求
    */
    let xhr;
    if(!new XMLHttpRequest()){
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }else{
        xhr = new XMLHttpRequest();
    }
    if(dp.type.toUpperCase() == 'GET'){
        xhr.open(dp.type,`${dp.url}?${dp.data}`,dp.async);
        xhr.send();
    }else{
        xhr.open(dp.type,dp.url,dp.async);
        xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
        xhr.send(dp.data);
    }
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)) {
            if(dp.dataType == 'string'){
                dp.success(xhr.responseText)
            }else{
                dp.success(JSON.parse(xhr.responseText))
            }
        }
    }
}